﻿# 杀掉已经启动的chrome进程
Get-Process chrome -ErrorAction SilentlyContinue | Stop-Process -ErrorAction Ignore
# 启动chrome,远程调试端口9222
Start-Process "C:\Program Files\Google\Chrome\Application\chrome.exe" -ArgumentList “--remote-debugging-port=9222”
# 等待启动完成
Start-Sleep -Seconds 2

# 获取版本信息
$v=Invoke-WebRequest "http://localhost:9222/json/version"
$v.Content
Start-Sleep -Seconds 2

# 获取协议
$p=Invoke-WebRequest "http://localhost:9222/json/protocol"
$p.Content | Out-File .\protocol.json
Start-Sleep -Seconds 2

# 创建新标签
#Invoke-WebRequest "http://localhost:9222/json/new" -Method Put
Start-Sleep -Seconds 2

# 发送Http Get请求,获取websocket连接地址
$r=Invoke-WebRequest "http://localhost:9222/json"
Start-Sleep -Seconds 5
# 从HTTP请求结果中提前websocket连接地址
$wsUrl=(ConvertFrom-Json( $r.Content ))[0].webSocketDebuggerUrl

# 创建websocket客户端
$ws = New-Object System.Net.WebSockets.ClientWebSocket
$CT = New-Object System.Threading.CancellationToken($false)

# 连接websocket服务
$ws.ConnectAsync($wsUrl, $CT)
# 等待连接完成
Start-Sleep -Seconds 2

#######################################################################################################################
#######################################################################################################################

# 导航到bing
$x=@"
{"id":1,"method":"Page.navigate","params":{"url":"https://cn.bing.com"}}
"@
$command = [System.Text.Encoding]::UTF8.GetBytes($x)
$send = New-Object System.ArraySegment[byte] -ArgumentList @(,$command)
$ws.SendAsync($send, [System.Net.WebSockets.WebSocketMessageType]::Text, $true, $CT)
# 等待
Start-Sleep -Seconds 2

# 接收websocket服务器返回的结果
#$array = [byte[]] @(,0)*1024
$a = New-Object System.ArraySegment[byte] -ArgumentList @(,([byte[]] @(,0)*1024))
$ws.ReceiveAsync($a, $CT).GetAwaiter()

# 解析接收到的从websocket服务器发回的内容
$aa = [System.Text.Encoding]::ASCII.GetString($a.Array)
$aa

#######################################################################################################################
#######################################################################################################################

# 取得版本
$x=@"
{"id":3,"method":"Browser.getVersion"}
"@
$command = [System.Text.Encoding]::UTF8.GetBytes($x)
$send = New-Object System.ArraySegment[byte] -ArgumentList @(,$command)
$ws.SendAsync($send, [System.Net.WebSockets.WebSocketMessageType]::Text, $true, $CT).GetAwaiter().GetResult() | Out-Null

# 接收websocket服务器返回的结果
$b = New-Object System.ArraySegment[byte] -ArgumentList @(,([byte[]] @(,0)*1024))
$ws.ReceiveAsync($b, $CT).GetAwaiter()

# 解析接收到的从websocket服务器发回的内容
$bb = [System.Text.Encoding]::ASCII.GetString($b.Array)
$bb
#($b | ConvertFrom-Json).id
#($b | ConvertFrom-Json).result

#######################################################################################################################
#######################################################################################################################

# 关闭浏览器
$x=@"
{"id":4,"method":"Browser.close"}
"@
$command = [System.Text.Encoding]::UTF8.GetBytes($x)
$send = New-Object System.ArraySegment[byte] -ArgumentList @(,$command)
$ws.SendAsync($send, [System.Net.WebSockets.WebSocketMessageType]::Text, $true, $CT) 
